package cn.edu.wynu.object;

public class Test02 {
    public static void main(String[] args) {
        // 掌握类和对象的一些注意事项：
        // 1.类名建议用英文单词，首字母大写，满足驼峰模式，且要有意义，比如:Student、Car.
        // 2.类中定义的变量也称为成员变量(对象的属性)，类中定义的方法也称为成员方法(对象的行为)。
        /*
        public class Student {
            // 成员变量（对象的属性）
            String name;
            double chinese;
            double math;

            // 成员方法（对象的行为）
            public void printTotalScore(){
                System.out.println(name + "的总成绩是：" + (chinese + math));
            }

            public void printAvgScore(){
                System.out.println(name + "的平均成绩是：" + (chinese + math) / 2.0);
            }
        }
        */

        // 3.成员变量本身存在默认值，同学们在定义成员变量时一般来说不需要赋初始值(没有意义)。
        Student s = new Student();
        System.out.println(s.name);
        System.out.println(s.chinese);
        System.out.println(s.math);


        //基本类型：
        //byte、short、char、int、long，默认值0
        //float、 double，默认值0.0
        //boolean，默认值false
        //引用类型：
        //数组、String，默认值null

        //修饰符 数据类型 变量名称 = 值;


        // 4.一个代码文件中，可以写多个class类，但只能一个用public修饰，且public修饰的类名必须成为代码文件名。
        // 5.对象与对象之间的数据不会相互影响，但多个变量指向同一个对象时就会相互影响了。
        Student s1 = new Student();
        s1.name = "张三";

//        Student s2 = new Student();
//        s2.name = "李四";
        // 把s1变量中存储的学生对象的地址赋值给s2变量
        Student s2 = s1;
        s2.name = "李四";

        System.out.println(s1.name);// 第一次情况输出为张三，第二次情况输出为李四

        // 6.如果某个对象没有一个变量引用它，则该对象无法被操作了，该对象会成为所谓的垃圾对象。
//        s1 = null;
//        s2 = null;
//        System.out.println(s1.name); // 报空指针异常

        // 如果某个对象没有任何变量指向它了，需要注意什么?
        // 注意:当堆内存中的对象，没有被任何变量引用(指向)时，就会被判定为内存中的“垃圾”
        // Java存在自动垃圾回收机制，会自动清楚掉垃圾对象，程序员不用操心。

    }
}


// 对象在计算机中的执行原理是怎么回事?
// (1)Student s1 = new Student();
// (2)每次new Student()，就是在堆内存中开辟一块内存区域代表一个学生对象。
// (3)s1变量里面记住的是学生对象的地址。